//jwtErr.js
'use strict';
const Base64 = require("js-base64");
module.exports = secret => {
  return async function jwtErr(ctx, next) {
    const token = ctx.request.header.authorization; // 若是没有 token，返回的是 null 字符串
    let decode = null;
    if (token !== 'null' && token) {
      try {
        // token：一般前端请求发过来的是HTTP Basic 认证，其格式为 'Basic ' + base64
        // 并且其base64是 Base64.encode(token) 方式加密过来的，为此要提取出来的同时还要解密
        const encodedCredentials = token.split(' ')[1];
        const decodedCredentials = Base64.decode(encodedCredentials);
        decode = ctx.app.jwt.verify(decodedCredentials, secret); // 验证token
        ctx.logger.info('token验证结果', decode);
        // 将执行结果存储在 ctx 上下文对象中
        ctx.middlewareTokenResult = decode;
        await next();
      } catch (error) {
        console.log('error', error);
        ctx.status = 200;
        ctx.body = {
          code: 401,
          msg: '验证token中间件发生错误',
          success: false,
        };
      }
    } else {
      ctx.status = 200;
      ctx.body = {
        code: 401,
        msg: 'token已过期，请重新登录',
        success: false,
      };
    }
  };
};
